#include "mywidget.h"
#include "ui_mywidget.h"
#include <QMouseEvent>
#include <QDebug>
#include <QEvent>

MyWidget::MyWidget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::MyWidget)
{
    ui->setupUi(this);
    setMouseTracking(true);

    // 给自定义控件 MyLabel 安装事件过滤器
    // 1. 安装事件过滤器
    ui->myLabel->installEventFilter(this);
    // 2. 重写事件过滤器处理事件函数 eventFilter(QObject *obj, QEvent *ev)

}

MyWidget::~MyWidget()
{
    delete ui;
}

void MyWidget::mouseMoveEvent(QMouseEvent *ev)
{
    QString text = QString("<center><h1>鼠标移动的位置 %1, %2</h1></center>").arg(ev->x()).arg(ev->y());
    ui->label->setText(text);
}


bool MyWidget::event(QEvent *e)
{
    if (e->type() == QEvent::MouseMove) {

        // QEvent 是 QMouseEvent 的父类, 可进行静态类型转换
        QMouseEvent *mev = static_cast<QMouseEvent *>(e);

        QString text = QString("event 事件中处理鼠标移动事件, 鼠标的坐标是( %1, %2 )").arg(mev->x()).arg(mev->y());

       // qDebug() << text;
        return true;
    }

    // 其它事件交给父类处理
    return QWidget::event(e);

}

// 重写事件过滤器处理事件函数
bool MyWidget::eventFilter(QObject *obj, QEvent *ev)
{
    if (ev->type() == QEvent::Enter) {
        qDebug() << "事件过滤器中鼠标进入";
        //return true;   // true 表示用户自己处理这个事件 不再往下分发
    }
    return QWidget::eventFilter(obj, ev);
}

